x11: Don't follow dpi and scale from xsettings when GDK_SCALE set
authorAlexander Larsson <alexl@redhat.com>
Mon, 1 Jul 2013 18:50:44 +0000 (20:50 +0200)
committerAlexander Larsson <alexl@redhat.com>
Wed, 3 Jul 2013 12:36:05 +0000 (14:36 +0200)
If things are hardcoded in the environment, that wins.

gdk/x11/gdkscreen-x11.c
gdk/x11/gdkscreen-x11.h
gdk/x11/gdkwindow-x11.c
gdk/x11/xsettings-client.c

index c615098e4a80335640d35c3804199321bca5ce2f..19961b52d4ee7408a43fd03cde18c8431f9d63f1 100644 (file)
@@ -1074,6 +1074,7 @@ _gdk_x11_screen_new (GdkDisplay *display,
 #endif
   if (scale_str)
     {
+      x11_screen->fixed_window_scale = TRUE;
       x11_screen->window_scale = atol (scale_str);
       if (x11_screen->window_scale == 0)
         x11_screen->window_scale = 1;
index f37b61a5423c13a4033bea655536fe50075251d2..ce8598e11e1b875904c65a0816999a911cac6bdc 100644 (file)
@@ -48,6 +48,7 @@ struct _GdkX11Screen
   gint primary_monitor;
 
   gint window_scale;
+  gboolean fixed_window_scale;
 
   /* Xft resources for the display, used for default values for
    * the Xft/ XSETTINGS
index 6f8527d4120a01e653843ce2a7706af751b61afb..1198730bb5d271e2e75aa0ac349eb4d89d2f3eef 100644 (file)
@@ -156,6 +156,7 @@ gdk_window_impl_x11_init (GdkWindowImplX11 *impl)
 {  
   impl->device_cursor = g_hash_table_new_full (NULL, NULL,
                                                NULL, g_object_unref);
+  impl->window_scale = 1;
 }
 
 GdkToplevelX11 *
index 475cbab8a45136142b3fd1d53af3cfc15a1f965a..2d1c2512d8fe36330504d1a16ccdf30f1efe1a05 100644 (file)
@@ -446,14 +446,17 @@ read_settings (GdkX11Screen *x11_screen,
 
   /* Since we support scaling we look at the specific Gdk/UnscaledDPI
      setting if it exists and use that instead of Xft/DPI if it is set */
-  setting = g_hash_table_lookup (x11_screen->xsettings, "gdk-unscaled-dpi");
-  if (setting)
+  if (x11_screen->xsettings && !x11_screen->fixed_window_scale)
     {
-      copy = g_new0 (GValue, 1);
-      g_value_init (copy, G_VALUE_TYPE (setting));
-      g_value_copy (setting, copy);
-      g_hash_table_insert (x11_screen->xsettings, 
-                          "gtk-xft-dpi", copy);
+      setting = g_hash_table_lookup (x11_screen->xsettings, "gdk-unscaled-dpi");
+      if (setting)
+       {
+         copy = g_new0 (GValue, 1);
+         g_value_init (copy, G_VALUE_TYPE (setting));
+         g_value_copy (setting, copy);
+         g_hash_table_insert (x11_screen->xsettings, 
+                              "gtk-xft-dpi", copy);
+       }
     }
 
   if (do_notify)
@@ -462,7 +465,8 @@ read_settings (GdkX11Screen *x11_screen,
     g_hash_table_unref (old_list);
 
   g_value_init (&value, G_TYPE_INT);
-  if (gdk_screen_get_setting (GDK_SCREEN (x11_screen),
+  if (!x11_screen->fixed_window_scale &&
+      gdk_screen_get_setting (GDK_SCREEN (x11_screen),
                              "gdk-window-scaling-factor", &value))
     _gdk_x11_screen_set_window_scale (x11_screen,
                                      g_value_get_int (&value));